package com.huang.annotation_reflection;

//类什么时候会被初始化
public class reflection05 {

    static{
        System.out.println("Main类被加载");
    }

    public static void main(String[] args) throws ClassNotFoundException {
        //1、主动引用：new一个对象（会发生类的初始化）
        Son son = new Son();
        //2、主动引用：反射 （会发生类的初始化）
        Class c1 = Class.forName("com.huang.annotation_reflection");
        //不会产生类的引用的方法，因为是子类调用父类的static常量
        //在这里父类会被初始化，但是子类不会被初始化
        System.out.println(Son.b);
        //数组只开辟了空间，也被命名了，但是没有加载任何类，不会发生类的初始化
        Son[] array = new Son[5];
        //常量，静态变量在链接阶段就被赋值并且调用到了常量池中了，所以调用时不会发生类的初始化
        System.out.println(Son.M);
    }
}

class Father{
    static int b = 2;
    static {
        System.out.println("父类被加载");
    }
}

class Son extends Father{
    static {
        System.out.println("子类被加载");
        m = 300;
    }
    static int m = 100;
    static final int M = 1;
}


